trait UsernameWidget {
    // 从这个widget中获取用户名
    fn get(&self) -> String;
}
trait AgeWidget {
    // 从这个widget中获取年龄
    fn get(&self) -> u8;
}
// 同时实现UsernameWidget和AgeWidget的表单
struct Form {
    username: String,
    age: u8,
}
impl UsernameWidget for Form {
    fn get(&self) -> String {
        self.username.clone()
    }
}
impl AgeWidget for Form {
    fn get(&self) -> u8 {
        self.age.into()
    }
}

fn main() {
    let form = Form {
        username: "Jack".to_string(),
        age: 28,
    };
    // 如果取消注释此行，则会收到一条错误消息，提示 “multiple `get` found”（找到了多个`get`）。
    // 因为毕竟有多个名为 `get` 的方法。
    // println!("{}", form.get());
    let username = <Form as UsernameWidget>::get(&form);
    println!("Username: {}", username);
    assert_eq!("Jack".to_owned(), username);
    let age = <Form as AgeWidget>::get(&form);
    println!("Age: {}", age);
    assert_eq!(28, age);
}
